package com.pure.common.syn;

/**
 * @description: 字符串反转
 * @date: 2022-11-08 17:09
 * @since 1.2.0
 **/
public class StrReversal {

    public static void main(String[] args) {

        String str = "singleton";
        // 第一种方式。
        System.out.println("singleton reversal string demo 1 :" + forEachStr(str));

        // 第二种方式。
        System.out.println("singleton reversal string demo 2 :" + reverseStr(str));

        // 第三种方式。
        System.out.println("singleton reversal string demo 3 :" + charArrayStr(str));
    }

    /**
     * @description: 将字符串 toCharArray() 返回 char[]，倒序遍历 char[] 追加至 StringBuilder 中并返回反转后的字符串。
     * @date 2022/11/9 11:02 上午
     * @since 1.2.1
     */
    public static String charArrayStr(String str) {

        char[] chars = str.toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = chars.length - 1; i >= 0; i--) {
            stringBuilder.append(chars[i]);
        }
        return stringBuilder.toString();
    }

    /**
     * @description: StringBuilder reverse 方法，可实现字符串反转。
     * @date 2022/11/9 10:57 上午
     * @since 1.2.1
     */
    public static String reverseStr(String str) {

        return new StringBuilder(str).reverse().toString();
    }

    /**
     * @description: loop 实现字符串反转，将字符串的每个字符以倒序的方式取出 charAt(i) 并追加至 StringBuilder 返回反转后的字符串。
     * @date 2022/11/9 10:53 上午
     * @since 1.2.1
     */
    public static String forEachStr(String str) {

        StringBuilder sb = new StringBuilder();
        int length = str.length();
        for (int i = length - 1; i >= 0; i--) {
            char c = str.charAt(i);
            sb.append(c);
        }
        return sb.toString();
    }

}
